#ifndef __OLED_H
#define __OLED_H
#include "stm32f10x.h"

/* ========== 只需改这里 ========== */
#define OLED_SCL_GPIO GPIOB
#define OLED_SCL_PIN  GPIO_Pin_8

#define OLED_SDA_GPIO GPIOB
#define OLED_SDA_PIN  GPIO_Pin_9
/* =================================== */

void OLED_init(void);
/**
 * @brief  清屏（全黑）
 */
void OLED_Clear(void);

/**
 * @brief  在指定位置显示一个 ASCII 字符
 * @param  Line: 起始行 1~4（屏幕被均分为 4 行）
 * @param  Column: 起始列 1~16（每行 16 个字符位，每位 8 像素宽）
 * @param  Char: 要显示的字符（仅支持 ASCII 可见字符 32~126）
 * @note   内部使用 8×16 点阵字模
 * @retval 无
 */
void OLED_ShowChar(uint8_t Line, uint8_t Column, char Char);

/**
 * @brief  在指定位置显示字符串
 * @param  Line: 起始行 1~4
 * @param  Column: 起始列 1~16
 * @param  String: 以 '\0' 结尾的 ASCII 字符串
 * @note   遇到 '\0' 自动结束，超出行尾会继续写到下一行
 * @retval 无
 */
void OLED_ShowString(uint8_t Line, uint8_t Column, char *String);

/**
 * @brief  显示无符号十进制整数（正数）
 * @param  Line: 起始行 1~4
 * @param  Column: 起始列 1~16
 * @param  Number: 要显示的数字 0~4 294 967 295
 * @param  Length: 固定显示位数（不足左侧补 0）
 * @note   例如 Length=4，数字 12 显示为 "0012"
 * @retval 无
 */
void OLED_ShowNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length);

/**
 * @brief  显示带符号十进制整数
 * @param  Line: 起始行 1~4
 * @param  Column: 起始列 1~16
 * @param  Number: 要显示的数字 -2 147 483 648~2 147 483 647
 * @param  Length: 数字部分位数（不含符号位，符号单独占 1 列）
 * @note   正数显示 "+"，负数显示 "-"；例如 Length=3，-66 显示为 "-066"
 * @retval 无
 */
void OLED_ShowSignedNum(uint8_t Line, uint8_t Column, int32_t Number, uint8_t Length);

/**
 * @brief  显示十六进制整数（大写）
 * @param  Line: 起始行 1~4
 * @param  Column: 起始列 1~16
 * @param  Number: 要显示的数字 0x00000000~0xFFFFFFFF
 * @param  Length: 固定显示位数（不足左侧补 0）
 * @note   例如 Length=4，数字 0xA5 显示为 "00A5"
 * @retval 无
 */
void OLED_ShowHexNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length);

/**
 * @brief  显示二进制整数
 * @param  Line: 起始行 1~4
 * @param  Column: 起始列 1~16
 * @param  Number: 要显示的数字 0~65535（最大 16 位）
 * @param  Length: 固定显示位数（不足左侧补 0）
 * @note   例如 Length=8，数字 5 显示为 "00000101"
 * @retval 无
 */
void OLED_ShowBinNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length);

#endif
